{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "from scipy import stats\n",
    "from datetime import datetime\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\", category=DeprecationWarning)\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "data=pd.read_csv(\"./data/day.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>dteday</th>\n",
       "      <th>season</th>\n",
       "      <th>yr</th>\n",
       "      <th>mnth</th>\n",
       "      <th>holiday</th>\n",
       "      <th>weekday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>weathersit</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>casual</th>\n",
       "      <th>registered</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>2011-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.344167</td>\n",
       "      <td>0.363625</td>\n",
       "      <td>0.805833</td>\n",
       "      <td>0.160446</td>\n",
       "      <td>331</td>\n",
       "      <td>654</td>\n",
       "      <td>985</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>2011-01-02</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.363478</td>\n",
       "      <td>0.353739</td>\n",
       "      <td>0.696087</td>\n",
       "      <td>0.248539</td>\n",
       "      <td>131</td>\n",
       "      <td>670</td>\n",
       "      <td>801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>2011-01-03</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.196364</td>\n",
       "      <td>0.189405</td>\n",
       "      <td>0.437273</td>\n",
       "      <td>0.248309</td>\n",
       "      <td>120</td>\n",
       "      <td>1229</td>\n",
       "      <td>1349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>2011-01-04</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.200000</td>\n",
       "      <td>0.212122</td>\n",
       "      <td>0.590435</td>\n",
       "      <td>0.160296</td>\n",
       "      <td>108</td>\n",
       "      <td>1454</td>\n",
       "      <td>1562</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>2011-01-05</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.226957</td>\n",
       "      <td>0.229270</td>\n",
       "      <td>0.436957</td>\n",
       "      <td>0.186900</td>\n",
       "      <td>82</td>\n",
       "      <td>1518</td>\n",
       "      <td>1600</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   instant      dteday  season  yr  mnth  holiday  weekday  workingday  \\\n",
       "0        1  2011-01-01       1   0     1        0        6           0   \n",
       "1        2  2011-01-02       1   0     1        0        0           0   \n",
       "2        3  2011-01-03       1   0     1        0        1           1   \n",
       "3        4  2011-01-04       1   0     1        0        2           1   \n",
       "4        5  2011-01-05       1   0     1        0        3           1   \n",
       "\n",
       "   weathersit      temp     atemp       hum  windspeed  casual  registered  \\\n",
       "0           2  0.344167  0.363625  0.805833   0.160446     331         654   \n",
       "1           2  0.363478  0.353739  0.696087   0.248539     131         670   \n",
       "2           1  0.196364  0.189405  0.437273   0.248309     120        1229   \n",
       "3           1  0.200000  0.212122  0.590435   0.160296     108        1454   \n",
       "4           1  0.226957  0.229270  0.436957   0.186900      82        1518   \n",
       "\n",
       "    cnt  \n",
       "0   985  \n",
       "1   801  \n",
       "2  1349  \n",
       "3  1562  \n",
       "4  1600  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 731 entries, 0 to 730\n",
      "Data columns (total 16 columns):\n",
      "instant       731 non-null int64\n",
      "dteday        731 non-null object\n",
      "season        731 non-null int64\n",
      "yr            731 non-null int64\n",
      "mnth          731 non-null int64\n",
      "holiday       731 non-null int64\n",
      "weekday       731 non-null int64\n",
      "workingday    731 non-null int64\n",
      "weathersit    731 non-null int64\n",
      "temp          731 non-null float64\n",
      "atemp         731 non-null float64\n",
      "hum           731 non-null float64\n",
      "windspeed     731 non-null float64\n",
      "casual        731 non-null int64\n",
      "registered    731 non-null int64\n",
      "cnt           731 non-null int64\n",
      "dtypes: float64(4), int64(11), object(1)\n",
      "memory usage: 91.5+ KB\n"
     ]
    }
   ],
   "source": [
    "data.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>season</th>\n",
       "      <th>yr</th>\n",
       "      <th>mnth</th>\n",
       "      <th>holiday</th>\n",
       "      <th>weekday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>weathersit</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>casual</th>\n",
       "      <th>registered</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>366.000000</td>\n",
       "      <td>2.496580</td>\n",
       "      <td>0.500684</td>\n",
       "      <td>6.519836</td>\n",
       "      <td>0.028728</td>\n",
       "      <td>2.997264</td>\n",
       "      <td>0.683995</td>\n",
       "      <td>1.395349</td>\n",
       "      <td>0.495385</td>\n",
       "      <td>0.474354</td>\n",
       "      <td>0.627894</td>\n",
       "      <td>0.190486</td>\n",
       "      <td>848.176471</td>\n",
       "      <td>3656.172367</td>\n",
       "      <td>4504.348837</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>211.165812</td>\n",
       "      <td>1.110807</td>\n",
       "      <td>0.500342</td>\n",
       "      <td>3.451913</td>\n",
       "      <td>0.167155</td>\n",
       "      <td>2.004787</td>\n",
       "      <td>0.465233</td>\n",
       "      <td>0.544894</td>\n",
       "      <td>0.183051</td>\n",
       "      <td>0.162961</td>\n",
       "      <td>0.142429</td>\n",
       "      <td>0.077498</td>\n",
       "      <td>686.622488</td>\n",
       "      <td>1560.256377</td>\n",
       "      <td>1937.211452</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.059130</td>\n",
       "      <td>0.079070</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.022392</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>20.000000</td>\n",
       "      <td>22.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>183.500000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.337083</td>\n",
       "      <td>0.337842</td>\n",
       "      <td>0.520000</td>\n",
       "      <td>0.134950</td>\n",
       "      <td>315.500000</td>\n",
       "      <td>2497.000000</td>\n",
       "      <td>3152.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>366.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>7.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.498333</td>\n",
       "      <td>0.486733</td>\n",
       "      <td>0.626667</td>\n",
       "      <td>0.180975</td>\n",
       "      <td>713.000000</td>\n",
       "      <td>3662.000000</td>\n",
       "      <td>4548.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>548.500000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>0.655417</td>\n",
       "      <td>0.608602</td>\n",
       "      <td>0.730209</td>\n",
       "      <td>0.233214</td>\n",
       "      <td>1096.000000</td>\n",
       "      <td>4776.500000</td>\n",
       "      <td>5956.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>731.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>12.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>0.861667</td>\n",
       "      <td>0.840896</td>\n",
       "      <td>0.972500</td>\n",
       "      <td>0.507463</td>\n",
       "      <td>3410.000000</td>\n",
       "      <td>6946.000000</td>\n",
       "      <td>8714.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          instant      season          yr        mnth     holiday     weekday  \\\n",
       "count  731.000000  731.000000  731.000000  731.000000  731.000000  731.000000   \n",
       "mean   366.000000    2.496580    0.500684    6.519836    0.028728    2.997264   \n",
       "std    211.165812    1.110807    0.500342    3.451913    0.167155    2.004787   \n",
       "min      1.000000    1.000000    0.000000    1.000000    0.000000    0.000000   \n",
       "25%    183.500000    2.000000    0.000000    4.000000    0.000000    1.000000   \n",
       "50%    366.000000    3.000000    1.000000    7.000000    0.000000    3.000000   \n",
       "75%    548.500000    3.000000    1.000000   10.000000    0.000000    5.000000   \n",
       "max    731.000000    4.000000    1.000000   12.000000    1.000000    6.000000   \n",
       "\n",
       "       workingday  weathersit        temp       atemp         hum   windspeed  \\\n",
       "count  731.000000  731.000000  731.000000  731.000000  731.000000  731.000000   \n",
       "mean     0.683995    1.395349    0.495385    0.474354    0.627894    0.190486   \n",
       "std      0.465233    0.544894    0.183051    0.162961    0.142429    0.077498   \n",
       "min      0.000000    1.000000    0.059130    0.079070    0.000000    0.022392   \n",
       "25%      0.000000    1.000000    0.337083    0.337842    0.520000    0.134950   \n",
       "50%      1.000000    1.000000    0.498333    0.486733    0.626667    0.180975   \n",
       "75%      1.000000    2.000000    0.655417    0.608602    0.730209    0.233214   \n",
       "max      1.000000    3.000000    0.861667    0.840896    0.972500    0.507463   \n",
       "\n",
       "            casual   registered          cnt  \n",
       "count   731.000000   731.000000   731.000000  \n",
       "mean    848.176471  3656.172367  4504.348837  \n",
       "std     686.622488  1560.256377  1937.211452  \n",
       "min       2.000000    20.000000    22.000000  \n",
       "25%     315.500000  2497.000000  3152.000000  \n",
       "50%     713.000000  3662.000000  4548.000000  \n",
       "75%    1096.000000  4776.500000  5956.000000  \n",
       "max    3410.000000  6946.000000  8714.000000  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 对数值型特征进行数学统计，如果要对所有特征进行统计展示，可以使用data.describe(include=0)\n",
    "data.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "data['dteday']=pd.to_datetime(data['dteday'])# 把object型转换为标准的日期格式，可以方便地提取里面的日期、时间等信息。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1. 对连续型特征，可以用哪个函数可视化其分布？（给出你最常用的一个即可），并根据代码运行结果给出示例。（10分） "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\93246\\Anaconda3\\lib\\site-packages\\scipy\\stats\\stats.py:1713: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.\n",
      "  return np.add.reduce(sorted[indexer] * weights, axis=axis) / sumval\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x28ba3b0ea90>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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HfVES0JzznVGJwgeBn4MPAS8GL0VOAC8j8lxdTP1MvAjoBr4jHPu/AJHFhFJRo8BHzGzg0At8FL06w8CB81sb3Rc9P8GHjezADAOfBQ4N4vzPA/8O5PzYB5yzmkohywaLXEnEmVmfwYMOOf+yussIiIyO2b2QWCnc+5jXmeR5KDhHCIiIiIis6SeaBERERGRWVJPtIiIiIjILKmIFhERERGZJRXRIiIiIiKzpCJaRERERGSWVESLiIiIiMySimgRERERkVlSES0iIiIiMksqokVEREREZklFtIiIiIjILKmIFhERERGZJRXRIiIiIiKzpCJaRERERGSWVESLiIiIiMySimgRERERkVlSES0iIiIiMksqokVEREREZklFtIiIiIjILIW8DjCd4uJit3z5cq9jiIjM2iuvvNLhnCvxOkcsqc0WkUQ1nzY7Lovo5cuXs2fPHq9jiIjMmpmd8zpDrKnNFpFENZ82W8M5RERERERmSUW0iIiIiMgsqYgWEREREZklFdEiIiIiIrOkIlpEREREZJZURIuIiIiIzJKKaBERERGRWVIRLSIiIiIySyqiRURERERmKS53LBRZCA/tqp/xsfdfX72ISURE4stM2ke1iyJXNueeaDOrMrOfmtkxMztiZh+f5phbzKzXzPZHP/50fnFFRERERLw3n57oCeCTzrm9ZpYDvGJmTzjnjl5y3HPOuV+Yx3lEREREROLKnIto51wz0Bx93G9mx4AK4NIiWkSuYqZDT3R7VSR5aQiGSHxZkImFZrYc2Absmubp15nZATP7sZldc4Wf8YCZ7TGzPe3t7QsRS0RERERkUcy7iDazbOC/gd91zvVd8vReYJlzbgvw98D3LvdznHMPOud2Oud2lpSUzDeWiIiIiMiimVcRbWYpTBbQ33DOPXzp8865PufcQPTxo0CKmRXP55wiIiIiIl6bz+ocBnwVOOac+5vLHFMWPQ4zuy56vs65nlNEREREJB7MZ3WOm4D3A4fMbH/0a38CVAM4574M3Av8pplNAMPAfc45N49zioiIiIh4bj6rczwP2FWO+SLwxbmeQ0RERGZuNptMicj8aNtvkTgScY5wRDdrRERE4p22/RbxQCTiONM5yKHGXg429vLU8Va6B8cYGJ0g4iA9JUBhZiqbK/PZUpVPXkaK15FFRERkChXRIovMOUdD1zAHm3o41NjL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\n",
      "text/plain": [
       "<Figure size 864x720 with 4 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 对于连续性特征可以使用sns.dist函数进行展示其分布情况,代码简单，实现的功能多。\n",
    "fig,axis=plt.subplots(nrows=2,ncols=2)# 给定一个2行2列的布局\n",
    "fig.set_size_inches(12, 10)# 设置画图域的大小\n",
    "numerical_features = ['temp','atemp','hum','windspeed']\n",
    "sns.distplot(data['temp'],ax=axis[0][0])\n",
    "sns.distplot(data['atemp'],ax=axis[0][1])\n",
    "sns.distplot(data['hum'],ax=axis[1][0])\n",
    "sns.distplot(data['windspeed'],ax=axis[1][1])\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2. 对两个连续型特征，可以用哪个函数得到这两个特征之间的相关性？根据代码运行结果，给出示例。（10分）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'atemp')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 对于两个连续型变量，可以用plt.scatter函数来得到连个连续性特征的相关性。\n",
    "x=data.temp\n",
    "y=data.atemp\n",
    "plt.scatter(x,y)\n",
    "plt.xlabel('temp')\n",
    "plt.ylabel('atemp')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从上图可以看出，temp和atemp这两个变量呈现正相关的规律。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3. 如果发现特征之间有较强的相关性，在选择线性回归模型时应该采取什么措施。（10分）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "比如上面，temp和atemp这两个特征的相关性很强，在选择回归模型前可以选择降维，也可以在这两个特征之间选择一个进行建模，去除特征之间的相关性。\n",
    "\n",
    "因为在使用最小二乘求解的时候，需要对特征矩阵求逆，而能够求逆的条件是特征矩阵的行或列之间是线性无关的情况。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4. 当采用带正则的模型以及采用随机梯度下降优化算法时，需要对输入（连续型）特征进行去量纲预处理。课程代码给出了用标准化（StandardScaler）的结果，请改成最小最大缩放（MinMaxScaler）去量纲 （10分），并重新训练最小二乘线性回归、岭回归、和Lasso模型（30分）。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\93246\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\data.py:323: DataConversionWarning: Data with input dtype int64, float64 were all converted to float64 by MinMaxScaler.\n",
      "  return self.partial_fit(X, y)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CRIM</th>\n",
       "      <th>ZN</th>\n",
       "      <th>INDUS</th>\n",
       "      <th>CHAS</th>\n",
       "      <th>NOX</th>\n",
       "      <th>RM</th>\n",
       "      <th>AGE</th>\n",
       "      <th>DIS</th>\n",
       "      <th>TAX</th>\n",
       "      <th>PTRATIO</th>\n",
       "      <th>B</th>\n",
       "      <th>LSTAT</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.18</td>\n",
       "      <td>0.067815</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.314815</td>\n",
       "      <td>0.577505</td>\n",
       "      <td>0.641607</td>\n",
       "      <td>0.269203</td>\n",
       "      <td>0.208015</td>\n",
       "      <td>0.3</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.089680</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.000236</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.242302</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.172840</td>\n",
       "      <td>0.547998</td>\n",
       "      <td>0.782698</td>\n",
       "      <td>0.348962</td>\n",
       "      <td>0.104962</td>\n",
       "      <td>0.5</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.204470</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.000236</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.242302</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.172840</td>\n",
       "      <td>0.694386</td>\n",
       "      <td>0.599382</td>\n",
       "      <td>0.348962</td>\n",
       "      <td>0.104962</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.989737</td>\n",
       "      <td>0.063466</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.000293</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.063050</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.150206</td>\n",
       "      <td>0.658555</td>\n",
       "      <td>0.441813</td>\n",
       "      <td>0.448545</td>\n",
       "      <td>0.066794</td>\n",
       "      <td>0.6</td>\n",
       "      <td>0.994276</td>\n",
       "      <td>0.033389</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.000705</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.063050</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.150206</td>\n",
       "      <td>0.687105</td>\n",
       "      <td>0.528321</td>\n",
       "      <td>0.448545</td>\n",
       "      <td>0.066794</td>\n",
       "      <td>0.6</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.099338</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       CRIM    ZN     INDUS  CHAS       NOX        RM       AGE       DIS  \\\n",
       "0  0.000000  0.18  0.067815   0.0  0.314815  0.577505  0.641607  0.269203   \n",
       "1  0.000236  0.00  0.242302   0.0  0.172840  0.547998  0.782698  0.348962   \n",
       "2  0.000236  0.00  0.242302   0.0  0.172840  0.694386  0.599382  0.348962   \n",
       "3  0.000293  0.00  0.063050   0.0  0.150206  0.658555  0.441813  0.448545   \n",
       "4  0.000705  0.00  0.063050   0.0  0.150206  0.687105  0.528321  0.448545   \n",
       "\n",
       "        TAX  PTRATIO         B     LSTAT  \n",
       "0  0.208015      0.3  1.000000  0.089680  \n",
       "1  0.104962      0.5  1.000000  0.204470  \n",
       "2  0.104962      0.5  0.989737  0.063466  \n",
       "3  0.066794      0.6  0.994276  0.033389  \n",
       "4  0.066794      0.6  1.000000  0.099338  "
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.preprocessing import MinMaxScaler\n",
    "scaler=MinMaxScaler()\n",
    "df = pd.read_csv(\"./data/boston_housing.csv\")\n",
    "y = df['MEDV']\n",
    "X = df.drop('MEDV', axis = 1)\n",
    "feat_names = X.columns\n",
    "log_y = np.log1p(y)\n",
    "X[\"RAD\"].astype(\"object\")\n",
    "X_cat = X[\"RAD\"]\n",
    "X_cat = pd.get_dummies(X_cat, prefix=\"RAD\")\n",
    "X= X.drop(\"RAD\", axis = 1)\n",
    "X = scaler.fit_transform(X)# 对训练数据，先调用fit方法训练模型，得到模型参数；然后对训练数据和测试数据进行transform\n",
    "#columns=['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'TAX','PTRATIO', 'B', 'LSTAT']\n",
    "fe_data = pd.DataFrame(data = X, columns = feat_names.drop(\"RAD\"), index = df.index)#  feat_names.drop(\"RAD\")\n",
    "fe_data.head()\n",
    "# 小例子\n",
    "#x = np.array([[-1, 2], [-0.5, 6], [0, 10], [1, 18]])\n",
    "#y=  np.dot(x, np.array([1, 2])) + 3\n",
    "#scaler=MinMaxScaler()# 实例化对象\n",
    "#print(scaler.fit(x))# 训练数据\n",
    "#print('........................')\n",
    "#print(scaler.data_max_)# 数据中最大的一个样本\n",
    "#print('........................')\n",
    "#print(scaler.transform(x))# 归一化数据的结果\n",
    "#print('........................')\n",
    "#x_MinMax=scaler.transform(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CRIM</th>\n",
       "      <th>ZN</th>\n",
       "      <th>INDUS</th>\n",
       "      <th>CHAS</th>\n",
       "      <th>NOX</th>\n",
       "      <th>RM</th>\n",
       "      <th>AGE</th>\n",
       "      <th>DIS</th>\n",
       "      <th>TAX</th>\n",
       "      <th>PTRATIO</th>\n",
       "      <th>...</th>\n",
       "      <th>RAD_1</th>\n",
       "      <th>RAD_2</th>\n",
       "      <th>RAD_3</th>\n",
       "      <th>RAD_4</th>\n",
       "      <th>RAD_5</th>\n",
       "      <th>RAD_6</th>\n",
       "      <th>RAD_7</th>\n",
       "      <th>RAD_8</th>\n",
       "      <th>RAD_24</th>\n",
       "      <th>log_MEDV</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.18</td>\n",
       "      <td>0.067815</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.314815</td>\n",
       "      <td>0.577505</td>\n",
       "      <td>0.641607</td>\n",
       "      <td>0.269203</td>\n",
       "      <td>0.208015</td>\n",
       "      <td>0.3</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3.218876</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.000236</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.242302</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.172840</td>\n",
       "      <td>0.547998</td>\n",
       "      <td>0.782698</td>\n",
       "      <td>0.348962</td>\n",
       "      <td>0.104962</td>\n",
       "      <td>0.5</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3.117950</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.000236</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.242302</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.172840</td>\n",
       "      <td>0.694386</td>\n",
       "      <td>0.599382</td>\n",
       "      <td>0.348962</td>\n",
       "      <td>0.104962</td>\n",
       "      <td>0.5</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3.575151</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.000293</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.063050</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.150206</td>\n",
       "      <td>0.658555</td>\n",
       "      <td>0.441813</td>\n",
       "      <td>0.448545</td>\n",
       "      <td>0.066794</td>\n",
       "      <td>0.6</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3.538057</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.000705</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.063050</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.150206</td>\n",
       "      <td>0.687105</td>\n",
       "      <td>0.528321</td>\n",
       "      <td>0.448545</td>\n",
       "      <td>0.066794</td>\n",
       "      <td>0.6</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3.616309</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 22 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       CRIM    ZN     INDUS  CHAS       NOX        RM       AGE       DIS  \\\n",
       "0  0.000000  0.18  0.067815   0.0  0.314815  0.577505  0.641607  0.269203   \n",
       "1  0.000236  0.00  0.242302   0.0  0.172840  0.547998  0.782698  0.348962   \n",
       "2  0.000236  0.00  0.242302   0.0  0.172840  0.694386  0.599382  0.348962   \n",
       "3  0.000293  0.00  0.063050   0.0  0.150206  0.658555  0.441813  0.448545   \n",
       "4  0.000705  0.00  0.063050   0.0  0.150206  0.687105  0.528321  0.448545   \n",
       "\n",
       "        TAX  PTRATIO    ...     RAD_1  RAD_2  RAD_3  RAD_4  RAD_5  RAD_6  \\\n",
       "0  0.208015      0.3    ...         1      0      0      0      0      0   \n",
       "1  0.104962      0.5    ...         0      1      0      0      0      0   \n",
       "2  0.104962      0.5    ...         0      1      0      0      0      0   \n",
       "3  0.066794      0.6    ...         0      0      1      0      0      0   \n",
       "4  0.066794      0.6    ...         0      0      1      0      0      0   \n",
       "\n",
       "   RAD_7  RAD_8  RAD_24  log_MEDV  \n",
       "0      0      0       0  3.218876  \n",
       "1      0      0       0  3.117950  \n",
       "2      0      0       0  3.575151  \n",
       "3      0      0       0  3.538057  \n",
       "4      0      0       0  3.616309  \n",
       "\n",
       "[5 rows x 22 columns]"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fe_data = pd.concat([fe_data, X_cat], axis = 1, ignore_index=False)\n",
    "fe_data[\"log_MEDV\"] = log_y\n",
    "fe_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(404, 21)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "x_MinMax=fe_data.drop(\"log_MEDV\",axis=1)\n",
    "y=fe_data['log_MEDV']\n",
    "X_train, X_test, y_train, y_test = train_test_split(x_MinMax, y, random_state=33, test_size=0.2)\n",
    "X_train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The r2 score of LinearRegression on train is 0.8112010417433881\n",
      "The r2 score of LinearRegression on test is 0.7083054590265426\n"
     ]
    }
   ],
   "source": [
    "# 线性回归\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.metrics import r2_score\n",
    "reg=LinearRegression()# 实例化机器学习模型\n",
    "reg_fit=reg.fit(X_train,y_train)# 用训练数据训练模型参数\n",
    "# 用训练好的模型对测试集进行预测\n",
    "y_test_pred_lr = reg.predict(X_test)\n",
    "y_train_pred_lr = reg.predict(X_train)\n",
    "# 使用r2_score评价模型在测试集和训练集上的性能，并输出评估结果\n",
    "# 训练集\n",
    "print ('The r2 score of LinearRegression on train is', r2_score(y_train, y_train_pred_lr))\n",
    "# 测试集\n",
    "print( 'The r2 score of LinearRegression on test is', r2_score(y_test, y_test_pred_lr))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The r2 score of Ridge on train is 0.8111166289611823\n",
      "The r2 score of Ridge on test is 0.7094862292759372\n"
     ]
    }
   ],
   "source": [
    "# 岭回归,L2正则\n",
    "from sklearn.linear_model import RidgeCV\n",
    "rid=RidgeCV(alphas=[1e-3, 1e-2, 1e-1, 1])\n",
    "rid_fit=rid.fit(X_train,y_train)\n",
    "y_test_pred_rid = rid.predict(X_test)\n",
    "y_train_pred_rid = rid.predict(X_train)\n",
    "print ('The r2 score of Ridge on train is', r2_score(y_train, y_train_pred_rid))\n",
    "print( 'The r2 score of Ridge on test is', r2_score(y_test, y_test_pred_rid))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The r2 score of LassoCV on train is 0.811150241998801\n",
      "The r2 score of LassoCV on test is 0.7084730589857932\n"
     ]
    }
   ],
   "source": [
    "# Lasso回归，L1正则\n",
    "from sklearn.linear_model import LassoCV\n",
    "las=LassoCV(cv=5, random_state=0)\n",
    "las_fit=las.fit(X_train,y_train)\n",
    "y_test_pred_las = las.predict(X_test)\n",
    "y_train_pred_las = las.predict(X_train)\n",
    "print ('The r2 score of LassoCV on train is', r2_score(y_train, y_train_pred_las))\n",
    "print( 'The r2 score of LassoCV on test is', r2_score(y_test, y_test_pred_las))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5. 代码中给出了岭回归（RidgeCV）和Lasso（LassoCV）超参数（alpha_）调优的过程，请结合两个最佳模型以及最小二乘线性回归模型的结果，给出什么场合应该用岭回归，什么场合用Lasso，什么场合用最小二乘。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(404, 4)\n",
      "alpha is: 0.1\n"
     ]
    }
   ],
   "source": [
    "# 岭回归,L2正则\n",
    "from sklearn.linear_model import RidgeCV\n",
    "alphas=[1e-3, 1e-2, 1e-1, 1]\n",
    "rid=RidgeCV(alphas=alphas,store_cv_values=True)# 只有当cv=Ｎｏｎｅ时,store_cv_values才能设置为Ｔｒｕｅ\n",
    "rid_fit=rid.fit(X_train,y_train)\n",
    "y_test_pred_rid = rid.predict(X_test)\n",
    "y_train_pred_rid = rid.predict(X_train)\n",
    "cv_result=rid.cv_values_# 在实例化学习模型时，要加上store_cv_values=True，才能使用cv_values_属性。\n",
    "print(cv_result.shape)# 每一行代表每一个样本的mse值，每一列代表每一个对应的alpha所得到的结果。\n",
    "cv_result[:5]\n",
    "print ('alpha is:', rid.alpha_)# rid.alpha_为模型得到的最优参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 画图展示最好的alpha值是不是在mse_mean最小的时候取得的\n",
    "mse_mean = np.mean(rid.cv_values_, axis = 0)\n",
    "plt.plot(np.log10(alphas), mse_mean.reshape(len(alphas),1)) \n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show()\n",
    "# 可以看出当mse_mean最小时，alpha等于0.1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(100, 5)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([7.52394784e-02, 7.01685893e-02, 6.54394613e-02, 6.10290606e-02,\n",
       "       5.69159062e-02, 5.30799646e-02, 4.95025526e-02, 4.61662463e-02,\n",
       "       4.30547958e-02, 4.01530466e-02, 3.74468657e-02, 3.49230723e-02,\n",
       "       3.25693741e-02, 3.03743073e-02, 2.83271806e-02, 2.64180235e-02,\n",
       "       2.46375371e-02, 2.29770495e-02, 2.14284733e-02, 1.99842659e-02,\n",
       "       1.86373933e-02, 1.73812954e-02, 1.62098542e-02, 1.51173643e-02,\n",
       "       1.40985045e-02, 1.31483125e-02, 1.22621603e-02, 1.14357317e-02,\n",
       "       1.06650017e-02, 9.94621624e-03, 9.27587456e-03, 8.65071166e-03,\n",
       "       8.06768265e-03, 7.52394784e-03, 7.01685893e-03, 6.54394613e-03,\n",
       "       6.10290606e-03, 5.69159062e-03, 5.30799646e-03, 4.95025526e-03,\n",
       "       4.61662463e-03, 4.30547958e-03, 4.01530466e-03, 3.74468657e-03,\n",
       "       3.49230723e-03, 3.25693741e-03, 3.03743073e-03, 2.83271806e-03,\n",
       "       2.64180235e-03, 2.46375371e-03, 2.29770495e-03, 2.14284733e-03,\n",
       "       1.99842659e-03, 1.86373933e-03, 1.73812954e-03, 1.62098542e-03,\n",
       "       1.51173643e-03, 1.40985045e-03, 1.31483125e-03, 1.22621603e-03,\n",
       "       1.14357317e-03, 1.06650017e-03, 9.94621624e-04, 9.27587456e-04,\n",
       "       8.65071166e-04, 8.06768265e-04, 7.52394784e-04, 7.01685893e-04,\n",
       "       6.54394613e-04, 6.10290606e-04, 5.69159062e-04, 5.30799646e-04,\n",
       "       4.95025526e-04, 4.61662463e-04, 4.30547958e-04, 4.01530466e-04,\n",
       "       3.74468657e-04, 3.49230723e-04, 3.25693741e-04, 3.03743073e-04,\n",
       "       2.83271806e-04, 2.64180235e-04, 2.46375371e-04, 2.29770495e-04,\n",
       "       2.14284733e-04, 1.99842659e-04, 1.86373933e-04, 1.73812954e-04,\n",
       "       1.62098542e-04, 1.51173643e-04, 1.40985045e-04, 1.31483125e-04,\n",
       "       1.22621603e-04, 1.14357317e-04, 1.06650017e-04, 9.94621624e-05,\n",
       "       9.27587456e-05, 8.65071166e-05, 8.06768265e-05, 7.52394784e-05])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Lasso回归，L1正则\n",
    "from sklearn.linear_model import LassoCV\n",
    "las=LassoCV(cv=5, random_state=0)\n",
    "las_fit=las.fit(X_train,y_train)\n",
    "y_test_pred_las = las.predict(X_test)\n",
    "y_train_pred_las = las.predict(X_train)\n",
    "las_mse=las.mse_path_\n",
    "print(las_mse.shape)# LassoCV默认的n_alphas参数是100，其结果表示每一个alpha值进行五次交叉验证得到的mse值。\n",
    "las.alphas_ # 随机选择的100个alpha值（即正则参数），默认值eps=1e-3， means that alpha_min / alpha_max = 1e-3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "alpha is: 7.523947836871464e-05\n"
     ]
    }
   ],
   "source": [
    "mses = np.mean(las.mse_path_, axis = 1)\n",
    "plt.plot(np.log10(las.alphas_), mses) \n",
    "#plt.plot(np.log10(lasso.alphas_)*np.ones(3), [0.3, 0.4, 1.0])\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show()    \n",
    "            \n",
    "print ('alpha is:', las.alpha_)# 最好的mses值所对应的alpha值"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "总结：岭回归是加了2范数正则下的最小二乘。当我们的feature之间完全共线性(使有解)或者相关程度异常高(使有稳定解)的时候，适合使用岭回归。另外lasso回归是对参数加了L1正则，能够起到筛选特征的作用。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
